using System;
using JGSY.CMS.LowCode.Platform.Domain.Interfaces;

namespace JGSY.CMS.LowCode.Platform.Domain.Entities
{
    /// <summary>
    /// 安全事件实体
    /// 用于记录系统中的各类安全相关事件和威胁
    /// </summary>
    public class SecurityEvent : ITenantEntity
    {
        /// <summary>
        /// 安全事件标识符
        /// </summary>
        public long Id { get; set; }
        
        /// <summary>
        /// 用户标识符
        /// 相关用户的ID
        /// </summary>
        public string UserId { get; set; } = string.Empty;
        
        /// <summary>
        /// 事件类型
        /// 如：登录异常、权限越权、恶意访问等
        /// </summary>
        public string EventType { get; set; } = string.Empty;
        
        /// <summary>
        /// 严重程度
        /// 如：低(Low)、中(Medium)、高(High)、严重(Critical)
        /// </summary>
        public string Severity { get; set; } = string.Empty;
        
        /// <summary>
        /// 事件描述
        /// 安全事件的详细描述信息
        /// </summary>
        public string Description { get; set; } = string.Empty;
        
        /// <summary>
        /// 元数据
        /// 以JSON格式存储的事件相关详细信息
        /// </summary>
        public string? Metadata { get; set; }
        
        /// <summary>
        /// IP地址
        /// 事件发生时的客户端IP地址
        /// </summary>
        public string? IpAddress { get; set; }
        
        /// <summary>
        /// 设备标识符
        /// 事件发生时的设备唯一标识
        /// </summary>
        public string? DeviceId { get; set; }
        
        /// <summary>
        /// 是否已解决
        /// 标识该安全事件是否已被处理解决
        /// </summary>
        public bool IsResolved { get; set; } = false;
        
        /// <summary>
        /// 解决时间
        /// 安全事件被解决的时间戳
        /// </summary>
        public DateTime? ResolvedAt { get; set; }
        
        /// <summary>
        /// 解决人员
        /// 处理该安全事件的人员标识
        /// </summary>
        public string? ResolvedBy { get; set; }
        
        /// <summary>
        /// 创建时间
        /// 安全事件记录的创建时间戳
        /// </summary>
        public DateTime CreatedAt { get; set; }

        /// <summary>
        /// 租户标识符
        /// </summary>
        public string TenantId { get; set; } = string.Empty;
    }
}
